package co.edu.usbcali.egrapico.logica;

/**
 * Clase para la traducci�n de la representaci�n de un
 * <Code>Proceso</Code> desde <I>GraPiCO Textual</I> hacia <I>C�lculo PiCO</I>.
 * <P> Recibe en <I>GraPiCO Textual</I>:<P> <Blockquote><Pre> (x-y)Imag.ext~Etiqueta_Proceso:ParteL�gicaProceso
 * </Pre></Blockquote> <P> Traducci�n a <I>C�lculo PiCO</I>:<P> <Blockquote><Pre> ParteL�gicaProceso
 * </Pre></Blockquote>
 *
 * @author Johanna Noguera Le�n & Alejandro Berm�dez Mart�nez.
 * @version 1.0
 * @since Enero de 2005
 */
public class Process {

    // Variable para almacenar el proceso representado en c�lculo PiCO.
    String processPico = "";
    // Variable para almacenar la parte l�gica del proceso representada
    // en GraPiCO Textual.
    String processLogicalPartGPT = "";
    // Objeto de la clase ProcessLogicalPart
    ProcessLogicalPart processLogicalPart;
    // Nombre o lista de nombres de los procesos que se est�n traduciendo.
    String nameCurrentProcess = "";

    /**
     * M�todo constructor de la clase
     * <Code>Process</Code>.<P> Toma un
     * <Code>Proceso</Code> representado en <I>GraPiCO Textual</I> y separa la
     * parte de la expresi�n que hace referencia a la representaci�n f�sica del
     * <Code>Proceso</Code>, para obtener la parte l�gica del proceso. De la
     * parte fisica toma adem�s el nombre del proceso para manejar mensajes del
     * analizador sem�ntico.
     *
     * @param processGraPicoT Expresi�n equivalente a la representaci�n de un
     * proceso en <I>GraPiCO Textual</I>.
     * @param nameProcess Nombre del proceso padre
     */
    public Process(String processGraPicoT, String nameProcess) {

        if (nameProcess != "") {
            nameCurrentProcess = nameProcess + ",";
        }

        nameCurrentProcess = nameCurrentProcess + processGraPicoT.substring(processGraPicoT.indexOf("~") + 1, processGraPicoT.indexOf(":"));
        processLogicalPartGPT = processGraPicoT.substring(processGraPicoT.indexOf(":") + 1);
        processLogicalPart = new ProcessLogicalPart(processLogicalPartGPT, nameCurrentProcess);
    }

    /**
     * M�todo generador de la traducci�n de un
     * <Code>Proceso</Code>.<P> Obtiene la traducci�n de la parte l�gica del
     * proceso.
     *
     * @return el
     * <Code>Proceso</Code> traducida a <I>C�lculo PiCO</I>.
     */
    public String traslate() {

        processPico = processLogicalPart.traslate();
        return processPico;
    }
}